SQL 使用总结笔记

1. Sqlite 导入 csv 数据不准确

如果需要导入 csv 文件,需要调整 sqlite 模式并且需要申明分割符,步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# terminal 打开或者新建文件 data.sqlite3
sqlite3 data.sqlite3

-- 需要申明模式
.mode csv

-- 说明分隔符类型,例如 ;、, 等,这里申明为 逗号
.separator ","

-- 导入数据 data.csv 为 data 表
.import data.csv data

-- 确认已经正确导入
.schema data

2. 查询 schema 信息

因为不同 DBMS 可以使用不同方法,但下面这个语句是一个比较通用的方法[^1]:

1
2
3
-- 表名称需要加引号,可以查询列名称、数据类型、最大长度
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';

其他的工具,例如 Sqlite3 中可以直接调用表达式来完成——.schema <name of table>;在 MySQL 或者 Mariadb 中可以使用 SHOW CREATE <name of table>

3. 单引号和双引号使用

单引号一般使用于字符串中,用于查询语句中构建的条件。例如:

1
2
3
SELECT *
FROM city_data
WHERE country = 'United Kingdom';

双引号用于表示列名称,例如:

1
2
3
4
-- country city 是一个包含了空格的列名称
SELECT *
FROM city_data
WHERE "country city" = 'United Kingdom';

4. JOIN 子句

SQL 语句使用 JOIN 将多个表进行关联查询——这样可以将信息单独存放到一个结果表,筛选必要的苏剧减少数据存储量以及减少对象不同数据独立。

对于为何使用信息表独立开,这个是涉及到了数据库规范。需要考虑要素:

  1. 表存储了逻辑分组的数据
  2. 数据修改是否存在多表修改的问题
  3. 能快速高效地访问和操作数据

JOIN 子句可以将之前独立表添加到统一表中——主要需要使用 JOIN 来联合两张表而 ON 用于判断需要满足什么条件,可以使用别名来替代标名称。

1
2
3
4
SELECT t1.columns, t2.columns
FROM tb1 [AS] t1
JOIN tb2 [AS] t2
ON t1.column = t1.column;

示例的表结构如下:

accounts 和 orders 表使用 JOIN 查询示例:

JOIN 的类型包括 INNER JOIN 和 OUTER JOIN(包括了 LEFT OUTER JOIN 、 RIGHT OUTER JOIN 以及 FULL OUTER JOIN)。不同类型的 JOIN 查询数据文式图:

参考

[^1]: psql - PostgreSQL “DESCRIBE TABLE”

作者

ZenRay

发布于

2019-02-23

更新于

2021-04-11

许可协议

CC BY-NC-SA 4.0